.. :validated: 3.2.0

Исправление односторонних отношений Left-Right
==============================================================================

Перед созданием соглашения о репликации в LDAP-каталоге сначала создается такая сущность, как сегмент. Как только **Topology** плагин контроллера видит относящийся к нему сегмент, для которого не создано соглашение, он создает такое соглашение. Сначала создается соглашение в одном направлении, затем в обратном, и при наличии двух взаимонаправленных сегментов они удаляются и создается третий сегмент, у которого направление **Both**.

Если в домене наблюдается однонаправленное соглашение о репликации, т.е. стрелочка только в одну сторону, и не становится двунаправленной, это означает, что второй сегмент не был создан и для устранения проблемы его нужно создать вручную.

Найти однонаправленные **Left-Right** сегменты и записать их в файл.

.. code-block:: bash

    sudo i
    set +o history
    ldapsearch -Q -xLLL -D "cn=directory manager" -w "AstraLinux_176" -b "cn=domain,cn=topology,cn=ipa,cn=etc,dc=ald,dc=company,dc=lan" "(ipaReplTopoSegmentDirection=left-right)" > direction.ldif
    set -o history
    exit

Создать **python** скрипт *parcing_topology.py* командой, а также этот файл можно скачать в личном кабинете:

.. code-block:: bash

    nano parcing_topology.py

Сохранить файл с таким содержимым:

.. code-block:: bash

    with open('direction.ldif') as f:
        lines = f.readlines()
    ldif_change=""
    text_block=""
    for line in lines:
        text_block=f"{text_block}{line}"
        if "ipaReplTopoSegmentLeftNode" in line:
            left_node=line.split(":")[1].strip()
        if "ipaReplTopoSegmentRightNode" in line:
            right_node=line.split(":")[1].strip()
        if not line.strip():
            text_block=text_block.replace(f"{left_node}-to-{right_node}",f"{right_node}-to-{left_node}")
            text_block=text_block.replace(f"ipaReplTopoSegmentLeftNode: {left_node}",f"ipaReplTopoSegmentLeftNode: {right_node}")
            text_block=text_block.replace(f"ipaReplTopoSegmentRightNode: {right_node}",f"ipaReplTopoSegmentRightNode: {left_node}")
            ldif_change+=f"{text_block}"
            text_block=""
    with open('add_direction.ldif','w') as f:
        f.write(ldif_change)

Запустить следующий скрипт в той же папке и убедиться, что скрипт отработал корректно.

.. code-block:: bash

    python3 parcing_topology.py

Теперь внести изменения из LDIF-файла в каталог от пользователя **admin**:

.. code-block:: bash

    ldapadd -f add_direction.ldif

Проверить, что в системе не осталось **Left-Right** сегментов.

.. code-block:: bash

    sudo i
    set +o history
    ldapsearch -xLLL -D "cn=Directory Manager" -w "AstraLinux_176" -b "cn=domain,cn=topology,cn=ipa,cn=etc,dc=ald,dc=company,dc=lan" "(ipaReplTopoSegmentDirection=left-right)"
    set -o history
    exit

Перезагрузить сервис **ipa** или последовательно все серверы, где были проблемы с односторонними соглашениями, для того, чтобы плагин **Topology** создал недостающие соглашения.

.. code-block:: bash

    sudo ipactl restart

Соглашение создается, но не всегда запускается репликация после рестарта реплик. Как решение можно использовать команду:

.. code-block:: bash
    
    ipa-replica-manage force-sync --from
